package ln.javatest.day18.demo01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

/*
java.lang.class
Class对象的功能：
  获取功能：
  (构造器不是私有的）
    1)获取构造方法们
        Constructor<?>[] getConstructors()
        Constructor<T> getConstructor(类<?>... parameterTypes)

        Constructor<?>[] getDeclaredConstructors()
        Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
    2)构造方法创建对象
        T newInstance(Object... initargs)
        如果使用空参构造方法创建对象，操作可以简化：Class对象的newInstance方法
*/
public class ReflectDemo3 {
    public static void main(String[] args) throws Exception {
        //1.先获取Person的class对象
        Class personClass = Person.class;

        //Constructor<T> getConstructor(类<?>... parameterTypes)
        Constructor constructor = personClass.getConstructor(String.class,int.class);
        System.out.println(constructor);
        //创建对象
        Object person1 = constructor.newInstance("王嘉尔",23);
        System.out.println(person1);
        System.out.println("============");
        //Constructor<?>[] getConstructors()
        Constructor constructor1 = personClass.getConstructor();
        System.out.println(constructor1);
        //public ln.javatest.day18.demo01.Person(java.lang.String,int)
        //Person{name='王嘉尔', age=23}

        //创建对象
        //如果使用空参构造方法创建对象，操作可以简化：Class对象的newInstance方法
        //Object person = constructor1.newInstance();
        Object person = personClass.newInstance();
        System.out.println(person);
        //public ln.javatest.day18.demo01.Person()
        //Person{name='null', age=0}


    }
}
